package com.jdk.demo.classloader;

/**在JVM中表示两个class对象是否为同一个类对象存在两个必要条件

类的完整类名必须一致，包括包名。
加载这个类的ClassLoader(指ClassLoader实例对象)必须相同。
如果调用父类的loadClass方法，结果如下，除非重写loadClass()方法去掉缓存查找步骤，不过现在一般都不建议重写loadClass()方法
 * @author zhangsulei
 *
 */
public class Demo3 {

	public static void main(String[] args) throws Exception {
		String rootDir="E:/workspace4/jdkdemo/target/classes/";
		//创建两个不同的自定义类加载器实例
		FileClassLoader loader1 = new FileClassLoader(rootDir);
		FileClassLoader loader2 = new FileClassLoader(rootDir);
		//通过findClass创建类的Class对象
		Class<?> object1=loader1.loadClass("com.jdk.demo.classloader.User");
		Class<?> object2=loader2.loadClass("com.jdk.demo.classloader.User");

		System.out.println("findClass->obj1:"+object1.hashCode());
		System.out.println("findClass->obj2:"+object2.hashCode());
	}

	/**
	* 直接调用loadClass方法的输出结果,注意并没有重写loadClass方法
	* loadClass->obj1:1872034366
	  loadClass->obj2:1872034366
	  Class->    obj3:1872034366
	  都是同一个实例
	*/

}
